Shell script: *, [], {}, ????, como utilizá-los?

Neste artigo abordarei o uso básico dos wildcards (coringas), que combinados com os comandos de terminal podem fazer mágica. Seu domínio é essencial para todo bom administrador de sistemas Linux.

[ Hits: 31.645 ]

Por: Fabio Maran em 30/01/2009 | Blog: http://movimentolivre.zip.net


Utilizando os Wildcards - realizando movimentações



Anteriormente aprendemos a utilizar os wildcards, e mesmo em modo listagem, conseguimos entender como é sua sintaxe, ou seja, entendendo sua sintaxe, sabemos como utilizá-lo, independente do comando usado.

Esta decidi ser uma parte do artigo mais prática, ou seja, hands-on, colocaremos em prática tudo que foi visto, porém um pouco mais afundo. ;D

Como sempre trabalharemos dentro do diretório /tmp, porém realizaremos consulta fora do mesmo, ou seja, não saberemos o que realmente contém em outros diretórios a não ser o que nos interessa, então teremos que ser bem mais cautelosos na montagem de nossa expressão.

Antes de continuar, quero destacar aqui um pouco do que realizaremos, para um exemplo mais real, de cotidiano de um administrador, resolvi que realizaremos cópias de arquivos em diretórios como /etc, e como são cópias, não há risco de prejudicar o funcionamento do seu sistema.

Se você não se sentir a vontade, peço que não continue, mas se mesmo assim gostaria de ler, crie uma máquina virtual e ali realize seus testes.

Um exemplo agora, copiaremos todos os arquivos iniciados com a, b, c, e, f com extensão .conf de /etc para /tmp.

Antes sempre de montar sua expressão, raciocine em quais wildcards você deve usar, aqui temos uma sequência de letras, então poderíamos usar o [] e fazer algo como [a-f] não é?

Veja, a-b-c-d-e-f, não queremos d em nossa pesquisa, então não poderíamos usá-lo, pois acabaríamos tendo arquivos que não nos interessa. Fique sempre atento a isso, use o [] em uma sequência sem intervalos!

Nossa expressão ficaria mais ou menos assim:

# cp -v /etc/{a,b,c,e,f}*.conf /tmp
`/etc/adduser.conf' -> `/tmp/adduser.conf'
`/etc/brltty.conf' -> `/tmp/brltty.conf'
`/etc/casper.conf' -> `/tmp/casper.conf'
cp: cannot stat `/etc/e*.conf': No such file or directory
`/etc/fdmount.conf' -> `/tmp/fdmount.conf'
`/etc/fuse.conf' -> `/tmp/fuse.conf'

(perfeito, somente o que queria)

Ok, mas isso é pouco para nós, vamos a mais exemplos.

Agora copiaremos todos os arquivos que terminam com as letras r, s, t, u, z do diretório /etc e que tenham ainda extensão .conf para /tmp.

Vamos lá!

# cp -v /etc/*{r,s,t,u,z}.conf /tmp
`/etc/adduser.conf' -> `/tmp/adduser.conf'
`/etc/casper.conf' -> `/tmp/casper.conf'
`/etc/deluser.conf' -> `/tmp/deluser.conf'
`/etc/discover.conf' -> `/tmp/discover.conf'
`/etc/scrollkeeper.conf' -> `/tmp/scrollkeeper.conf'
`/etc/mke2fs.conf' -> `/tmp/mke2fs.conf'
`/etc/fdmount.conf' -> `/tmp/fdmount.conf'
`/etc/host.conf' -> `/tmp/host.conf'
`/etc/popularity-contest.conf' -> `/tmp/popularity-contest.conf'
cp: cannot stat `/etc/*u.conf': No such file or directory
cp: cannot stat `/etc/*z.conf': No such file or directory

Ainda percebemos que não tem arquivos terminados com u ou z.

Agora moveremos alguns arquivos. Antes criei um usuário com o nome da sua distribuição, mas crie um /home para ele também, no meu caso criei o usuário Debian.

Vamos então mover todos arquivos que acabamos de copiar de /etc para /tmp para o home do usuário criado (exceto os que terminem com a letra t) e que tenham extensão .conf.

# mv -v /tmp/*{r,s,u,z}.conf /home/debian
`/tmp/adduser.conf' -> `/home/debian/adduser.conf'
removed `/tmp/adduser.conf'
`/tmp/casper.conf' -> `/home/debian/casper.conf'
removed `/tmp/casper.conf'
`/tmp/deluser.conf' -> `/home/debian/deluser.conf'
removed `/tmp/deluser.conf'
`/tmp/discover.conf' -> `/home/debian/discover.conf'
removed `/tmp/discover.conf'
`/tmp/scrollkeeper.conf' -> `/home/debian/scrollkeeper.conf'
removed `/tmp/scrollkeeper.conf'
`/tmp/mke2fs.conf' -> `/home/debian/mke2fs.conf'
removed `/tmp/mke2fs.conf'
mv: cannot stat `/tmp/*u.conf': No such file or directory
mv: cannot stat `/tmp/*z.conf': No such file or directory

Simples não é?

Bom, acho que poderia deixar mais exemplos, mas creio eu que vocês devem ter captado a mensagem.

Espero também que tenha sido de ajuda a vocês. ;D

Considerações finais

O uso de wildcars pode nos auxiliar em inúmeras tarefas, porém para usar em desktops pode parecer um pouco sem sentido, mas para administradores de sistemas isso ajuda e muito, otimiza tarefas, buscas, verificações, enfim, você procura e realmente acha o que deseja. :)

É isso aí, espero que tenha sido útil a vocês e de fácil entendimento.

Um abraço a todos!

Dúvidas, criticas ou sugestões: f-maran@hotmail.com

Fábio Maran
2:)

Página anterior    

Páginas do artigo
   1. Introdução
   2. *, [], {}, ????
   3. Utilizando os wildcards - modo listagem
   4. Utilizando os Wildcards - realizando movimentações
Outros artigos deste autor

Instalando o KDE 4 no Debian

Umask para leigos

Desktop Debian/Ubuntu

Desvendando os filesystems

Samba: Implementando um domínio

Leitura recomendada

Linux pode ser usado por todo mundo! Escolhendo o seu primeiro Linux. Duas Filosofias fundamentais

Usando variáveis de ambiente

diff e patch - Um guia sem hora pra acabar

Permissões do Linux

Guia introdutório do Linux IV

  
Comentários
[1] Comentário enviado por alfameck em 30/01/2009 - 14:59h

ferramenta interessante.

[2] Comentário enviado por Tulio Hoffimann em 30/01/2009 - 15:10h

acrescentando, os metacaracteres "{}" podem ser usados juntamente com o operador ".." que serve para expandir uma sequencia, por exemplo:

No exemplo em que você ultilizou
$ touch aula{1,2,3,4,5,6,7,8,9,10}

Poderia ser facilmente substituido por
$ touch aula{1..10}

E o mesmo pode ser feito com caracteres não-numéricos..
$ echo {a..z}

[3] Comentário enviado por fulllinux em 30/01/2009 - 15:52h

Taí, maran e mais uma de suas super produções!!! hauauha
Abraço meu brother!!!

[4] Comentário enviado por maran em 30/01/2009 - 15:55h

@fulllinux:
kkkkk que isso meu velho, obrigado pelo coment, abraço meu velho, fica na paz!

[5] Comentário enviado por maran em 30/01/2009 - 16:17h

@tuliohm , Fala meu velho, sim podemos fazer estas e outras coisas algo como:

Criar diretorios mais rapidamente, um exemplo simples, bem básico:

$ mkdir /home/maran/{mp3,fotos,musicas,arquivos}

O que aconteceria, seria criado, todos estes diretorios dentro do {}, sendo subdiretórios de /maran

Ou tambem já povoar um arquivo com inumeras linhas, sendo prático para arquivos de exemplos, ou que você repita muitas vezes algumas palavras como:

$ echo -e "\nTeste "{1..20} > wildcards.txt

Eu criaria 20 linhas contendo desde Teste 1 até Teste 20 , cada um em uma linha.

Porem como digo no inicio do artigo, falarei sobre o básico!
Pois como o artigo indica-se a quem esta começando, acabaria confundindo o pessoal!

Obrigado pela observação!

[6] Comentário enviado por cassimirinho em 30/01/2009 - 16:27h

Gostei de ver, está em meus favoritos úteis.

[7] Comentário enviado por leandrojf em 30/01/2009 - 21:24h

boa maram...falo que ia mandar mais um artigo e mandou mesmo...parabens!!!

[8] Comentário enviado por Teixeira em 30/01/2009 - 22:58h

Grande Maran!
Os wildcards ja eram muito importantes nos tempos do DOS,
e nao perderam nada dese aimportancia ate hoje.
Voce abordou com muita felicidade o assunto.
Acho que ficou bem pratico e compreensivel,
pois eeees materia em manuais por ai sempre foi de uma chatice tremenda, que voce conseguiu evitar.
Ficou bem leve.
Parabens!

[9] Comentário enviado por Teixeira em 30/01/2009 - 22:59h

Grande Maran!
Os wildcards ja eram muito importantes nos tempos do DOS,
e nao perderam nada dessa importancia ate hoje.
Voce abordou com muita felicidade o assunto.
Acho que ficou bem pratico e compreensivel,
pois eeees materia em manuais por ai sempre foi de uma chatice tremenda, que voce conseguiu evitar.
Ficou bem leve.
Parabens!

[10] Comentário enviado por Teixeira em 30/01/2009 - 23:01h

Grande Maran!
Os wildcards ja eram muito importantes nos tempos do DOS,
e nao perderam nada dessa importancia ate hoje.
Voce abordou com muita felicidade o assunto.
Acho que ficou bem pratico e compreensivel,
pois essa materia em manuais por ai sempre foi de uma chatice tremenda, que voce conseguiu evitar.
Ficou bem leve.
Parabens!

[11] Comentário enviado por joao_15 em 01/02/2009 - 13:41h

Muito bom o artigo, foi esclarecedor.
Não sabia por exemplo que dava para se usar o {} para criar vários diretórios que estivessem lá dentro.

Vlw por contribuir e mostrar que os wildcards estão aí para nos ajudar.

[12] Comentário enviado por slackmen em 07/02/2009 - 12:47h

Bom artigo, isso eh uma coisa que muita gente esquece e esquenta a cabeça com coisas simples enquanto poderia usar os coringas...

[13] Comentário enviado por Weverton em 24/02/2009 - 10:55h

Artigo bacana, essas dicas sempre facilitam a vida de nós administradores.

[14] Comentário enviado por leandrojpg em 20/02/2010 - 22:15h

Boa Maran, excelente post eu por exemplo aprendi tudo depois que li seu post.

valeu mesmo, fica na paz irmão. valeu


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts